package ru.chezclif.lern.conread.readers;

import java.util.List;

/**
 * Интерфейс для чтения, редактирования и сохранения
 * 
 * @author Vit
 * 
 */
public interface PropertyReader {
	/**
	 * Чтение файла и сохранение настроек в хранилище даннных
	 * 
	 * @param pseudoProtocolString строка, содержащая псевдопротокол и путь до оперируемого файла
	 */
	public void readFile(String pseudoProtocolString);

	/**
	 * Сохранение в файл определенного формата настроек из хранилища данных
	 * 
	 * @param pseudoProtocolString строка, содержащая псевдопротокол и путь до оперируемого файла
	 */
	public void saveFile(String pseudoProtocolString);

	/**
	 * Получить значение настройки по ключу
	 * 
	 * @param key ключ
	 */
	public String getSetting(String key);

	/**
	 * Задать ключу значение
	 * 
	 * @param key ключ
	 * @param value значение
	 */
	public void setSetting(String key, String value);

	/**
	 * Удалить одну настройку (ключ со значением)
	 * 
	 * @param key ключ
	 * @param value значение
	 */
	public void removeSetting(String key, String value);

	/** 
	 * Получить заглавный комментарий 
	 */
	public String getHeaderComment();

	/**
	 * Задать заглавный комментарий
	 * 
	 * @param comment Заглавный комментарий
	 */
	public void setHeaderComment(String comment);

	/** 
	 * Получить конечный комментарий 
	 */
	public String getFooterComment();

	/**
	 * Задать конечный комментарий
	 * 
	 * @param comment конечный комментарий
	 */
	public void setFooterComment(String comment);

	/**
	 * Получить коллекцию всех ключей из хранилища настроек
	 * 
	 * @param localBufferForKeys коллекция для заполнения ее ключами
	 */
	public List<String> getKeys(List<String> localBufferForKeys);

	/**
	 * Получить коллекцию ключей находящихся в определенной субсекции
	 * 
	 * @param sectionName название секции до точки
	 * @param localBufferForSubsectionKeys коллекция для заполнения ее ключами
	 */
	public List<String> getSubsectionKeys(String sectionName, List<String> localBufferForSubsectionKeys);

	/**
	 * Получить коллекцию значений находящихся в определенной субсекции
	 * 
	 * @param sectionName название секции до точки
	 * @param localBufferForSubsectionValues коллекция для заполнения ее ключами из субсекции
	 */
	public List<String> getSubsectionValues(String sectionName, List<String> localBufferForSubsectionValues);
}
